package models

import (
	"time"

	"gorm.io/gorm"
)

// 商家门店
type Store struct {
	gorm.Model
	Name        string  `gorm:"not null"`                    // 门店名称
	Address     string  `gorm:"not null"`                    // 门店地址
	Latitude    float64 `gorm:"not null;index:idx_location"` // 纬度
	Longitude   float64 `gorm:"not null;index:idx_location"` // 经度
	Phone       string  `gorm:"not null"`                    // 联系电话
	OpenTime    string  `gorm:"not null"`                    // 营业时间
	Status      string  `gorm:"not null;default:open"`       // 状态：open（营业中）, closed（已关闭）
	Description string  // 门店描述
	ImageURL    string  // 门店图片
	MinAmount   float64 `gorm:"not null;default:0"` // 起送金额（外卖）
	DeliveryFee float64 `gorm:"not null;default:0"` // 配送费
	Area        string  `gorm:"not null"`           // 配送范围（以公里为单位的数字）
}

// 用户配送地址
type DeliveryAddress struct {
	gorm.Model
	UserID    uint    `gorm:"not null;index"`              // 用户ID
	User      User    `gorm:"foreignKey:UserID"`           // 用户关联
	Name      string  `gorm:"not null"`                    // 收货人姓名
	Phone     string  `gorm:"not null"`                    // 联系电话
	Address   string  `gorm:"not null"`                    // 详细地址
	Latitude  float64 `gorm:"not null;index:idx_location"` // 纬度
	Longitude float64 `gorm:"not null;index:idx_location"` // 经度
	Tag       string  // 地址标签（家、公司等）
	IsDefault bool    `gorm:"not null;default:false"` // 是否默认地址
}

// 配送订单
type Delivery struct {
	gorm.Model
	OrderID       uint       `gorm:"not null;index"`           // 订单ID
	Order         Order      `gorm:"foreignKey:OrderID"`       // 订单关联
	StoreID       uint       `gorm:"not null;index"`           // 门店ID
	Store         Store      `gorm:"foreignKey:StoreID"`       // 门店关联
	AddressID     uint       `gorm:"not null"`                 // 配送地址ID
	Address       string     `gorm:"not null"`                 // 配送地址（快照）
	Distance      float64    `gorm:"not null"`                 // 配送距离（公里）
	Fee           float64    `gorm:"not null"`                 // 配送费
	Status        string     `gorm:"not null;default:pending"` // 状态：pending（待配送）, delivering（配送中）, completed（已完成）, cancelled（已取消）
	CourierName   string     // 配送员姓名
	CourierPhone  string     // 配送员电话
	EstimatedTime int        // 预计送达时间（分钟）
	DeliveredAt   *time.Time // 实际送达时间
	Remark        string     // 备注
}
